﻿define(["jquery", "datatables"
],function ($){
	(function ($) {		
			var _MyTable = {
				options: {
                    trigger:".tDefault",  //要成为datatable的table元素的jquery选择器，如#xxx，.xxx
                    columns:[], //列定义
					sorting:[], //排序定义
					ajax:{}, //ajax配置
                    renderCell: function (row,cell,data) {},
                    paramForm:null, //如果需要向后台发送动态参数，请把其放入一个form中之后用此参数传入其ID，注意不需要#
                    dataMaper:{ //如果后台的json数据格式与datatable支持的数据格式不相符，那么就利用dataMaper进行匹配。
                        data:function(data) {
                            data.data = data.content[0].records;
                        },
                        recordsTotal:function(data) {
                            data.recordsTotal = data.content[0].totalRecords;
                        }
                    },
                    dataProcessBeforeRender:function(data) { //当ajax返回之后，渲染数据之前如果有处理数据的需求，使用此方法，data为每一行的数据。

                    },
                    onAjaxResponed:function(e, settings, data) { //当ajax返回之后，渲染数据之前当dataProcessBeforeRender完成之后会执行此方法。

                    },
                    checkbox:{ //如果希望在每个数据行的最前面能够出现一个checkbox控件，那么就可以配置此项，注意html中的表头和columns的配置中仍然需要对checkbox所在列进行声明
                        inputName:null, //每个数据行中的checkbox控件的name属性，格式为xxx[index].xxx
                        className:"", //每个checkbox控件的class
                        _checkboxAttrName:"myTableCheckbox" + new Date().getTime() //设置一个肯定会唯一的属性名称，用于定位所有数据行中的checkbox
                    }

				},
                _dataProcessBeforeRender:function (data) {
                    _MyTable.options.dataProcessBeforeRender(data);
                },

                _onAjaxResponed:function(e, settings, data) {
                    _MyTable.options.onAjaxResponed(e, settings, data);
                },
                _selectAll: function(sellectAllCheckBoxDom) {
                    //全选
                    var checked=$(sellectAllCheckBoxDom).attr("checked");
                    if(checked=="checked")
                    {
                        $(_MyTable.options.trigger+" tbody input[type=checkbox]["+_MyTable.options.checkbox._checkboxAttrName+"]").attr("checked",true);
                    }
                    else
                    {
                        $(_MyTable.options.trigger+" tbody input[type=checkbox]["+_MyTable.options.checkbox._checkboxAttrName+"]").attr("checked",false);
                    }
                },
				init: function(){
					var options = _MyTable.options;
                    //alert(options.columns)
					var url = options.ajax.url;
					//datatable发送ajax请求之前发生
                    if (url) {
                        $(_MyTable.options.trigger).on('preXhr.dt', function ( e, settings, data ) {
                            //options.ajax && options.ajax.url && (settings.ajax.url = options.ajax.url);
                            options.ajax.paramForm && (settings.ajax.url = url + "?" + $('#' + options.ajax.paramForm).serialize());
                            //alert(settings.ajax.url);
                        });
                        //datatable收到ajax响应，开始渲染数据之前发生。
                        $(_MyTable.options.trigger).on('xhr.dt', function ( e, settings, data ) {
                            //当返回的结果为FAIL显示错误信息。
                            if (data.result == "FAIL") {
                                alert(data.content[0]);
                                return;
                            } else {
                                //如果后台的json数据格式与datatable支持的数据格式不相符，那么就利用dataMaper进行匹配。
                                var dataMaper = options.ajax.dataMaper;
                                if (dataMaper) {
                                    data.data = dataMaper.data && dataMaper.data(data) || data.data;
                                    data.recordsTotal = dataMaper.recordsTotal && dataMaper.recordsTotal(data) || data.recordsTotal;
                                    data.recordsFiltered = dataMaper.recordsFiltered && dataMaper.recordsFiltered(data) || data.recordsTotal;
                                }

                                $.each(data.data,function (index, data) {
                                    _MyTable._dataProcessBeforeRender(data);
                                });

                                _MyTable._onAjaxResponed(e, settings, data);

                            }
                        });
                    }

                    //配置表头行第一列的checkbox控件
                    /*if (options.checkbox.inputName) {
                        var selectAllCheckBoxId = "checkboxID"+new Date().getTime();
                        options.columns.unshift({ "data": null,"defaultContent": '<input type="checkbox" name="chbox1" id="'+selectAllCheckBoxId+'">' });
                        $("#"+selectAllCheckBoxId).live("click",function () {
                            _MyTable._selectAll(this);
                        });
                    }*/

					return $(options.trigger).DataTable({
						"language" : {
                            "processing":   "处理中...",
                            "lengthMenu":   "显示 _MENU_ 项结果",
                            "zeroRecords":  "没有匹配结果",
                            "info":         "显示第 _START_ 至 _END_ 项结果，共 _TOTAL_ 项",
                            "infoEmpty":    "显示第 0 至 0 项结果，共 0 项",
                            "infoFiltered": "(由 _MAX_ 项结果过滤)",
                            "infoPostFix":  "",
                            "search":       "搜索:",
                            //"url":          "",
                            "emptyTable":     "表中数据为空",
                            "loadingRecords": "载入中...",
                            "infoThousands":  ",",
                            "paginate": {
                                "first":    "首页",
                                "previous": "上页",
                                "next":     "下页",
                                "last":     "末页"
                            },
                            "aria": {
                                "sortAscending":  ": 以升序排列此列",
                                "sortDescending": ": 以降序排列此列"
                            }
					    },
                        headerCallback:function (thead, data, start, end, display) {
                            if(options.checkbox.inputName) {
                                var selectAllCheckBoxId = "myTableCheckboxID"+new Date().getTime();
                                $(thead).find('th').eq(0).html('<input type="checkbox" class="'+options.checkbox.className+'" name="chbox1" id="'+selectAllCheckBoxId+'">');
                                $("#"+selectAllCheckBoxId).live("click",function () {
                                    _MyTable._selectAll(this);
                                });
                            }
                            //alert("www");
                        },
						columns:options.columns,
						ordering:false,
						serverSide: options.ajax && true || false,
						ajax:options.ajax,
						"jQueryUI": false,
						"autoWidth": false,
						"paginationType": "full_numbers",
						"dom": '<"H"f>t<"F"lip>',   //H代表表头，f代表过滤项栏，t表数据，F底部，l，p分页
						"filter": false,  //是否显示过滤项栏
						/*"sorting": [[4,'desc']],*/
						sorting:options.sorting,
						"createdRow": function ( row, data, index ) {
                            
                            $('td', row).each(function(cellIndex, cell){

                                //如果配置了checbox相关配置信息，那么就在每行的开头位置插入一个chekbox控件
                                if(options.checkbox.inputName) {
                                    if (cellIndex == 0) {
                                        //$(this).css("text-align","left");
                                        //checkbox控件的实际按照如下方式生成。
                                        var realInputName = options.checkbox.inputName.replace("index",index);

                                        $(this).html('<input type="checkbox" class="check" value="select" name="'+realInputName+'" '+options.checkbox._checkboxAttrName+' />');
                                    }
                                    //alert(index );

                                }
                                options.renderCell(
                                 {
                                 "jdom":$(row),
                                 "index":index,
                                 "cellsLength": $('td', row).length
                                 },
                                 {
                                 "jdom":$(this),
                                 "index":cellIndex
                                 },
                                 data);
                            });
						}
					});
				}	
			}
			
				
			$.fn.extend({
				//插件名称
				MyTable: function (options) {

					_MyTable.options = $.extend(_MyTable.options, options);

                    return _MyTable.init();

				}
			});
	})(jQuery);		
});
